/**
 * 
 */
package com.rf.richfitwheel.workflow.service;

import java.util.List;
import java.util.Map;

import com.rf.richfitwheel.admin.sys.vo.UserVO;
import com.rf.richfitwheel.common.utils.PageUtils;
import com.rf.richfitwheel.workflow.entity.TaskParam;

import net.sf.json.JSONObject;

/**
 * 工作流任务相关接口
 * @author hushouquan
 *
 */
public interface LovelyTaskService {

	/**
	 * 流程提交方法
	 * @param params 参数
	 * @param user 操作人
	 * @return
	 */
	TaskParam subminTask(TaskParam params, UserVO user);

	/**
	 * 我的待办流程
	 * @param params
	 * @param user
	 * @return
	 */
	PageUtils getToDoList(Map<String, Object> params, UserVO user);

	/**
	 * 别人授权给自己处理的流程
	 * @param params
	 * @return
	 */
	PageUtils getAuthorizationTaskList(Map<String, Object> params);

	/**
	 * 查询当前任务节点信息
	 * @param taskId
	 * @return
	 * @throws Exception 
	 */
	Map<String, Object> getTaskNodeInfo(String taskId) throws Exception;

	/**
	 * 根据业务id查询流程处理记录
	 * @param busNo
	 * @return
	 */
	List<Map<String, Object>> getApproveHistoryByBusNo(String busNo);

	/**
	 * 根据流程实例id查询流程处理记录
	 * @param processId
	 * @return
	 */
	List<Map<String, Object>> getApproveHistoryByProcessId(String processId);

	/**
	 * 获取可退回节点
	 * @param processId
	 * @param taskDefinitionKey
	 * @param processDefinitionId
	 * @return
	 */
	List<Map<String, Object>> getRetractNode(String processId, String taskDefinitionKey, String processDefinitionId);

	/**
	 * 获取审批意见
	 * @param taskId
	 * @return
	 */
	String getApproveAdviceByTaskId(String taskId);

	/**
	 * 我参与的流程
	 * @param page
	 * @param limit
	 * @param dataForm
	 * @param userId
	 * @return
	 */
	PageUtils queryParticipationProcessList(String page, String limit, String dataForm, String userId);

	/**
     * 根据流程实例id查询当前用户参与过的节点，不包含撤回和终止的节点
     * @param processid 流程实例id
     * @param user 操作用户
     * @return
     */
    List<Map<String,Object>> getCanRecallNode(String processid, UserVO user);
    
    /**
     * 参与人撤回流程
     * @param params{'processId': 流程实例id,
     *      *  'recallNodeKey': 要撤回的节点key,
     *      *  'deleteReason': 撤回原因
     *      *  }
     * @param user
     * @param system
     */
    void recallMaster(Map<String,Object> params, UserVO user, UserVO system) throws Exception;
    


    /**
     * 流程查询、分页,只查询自己租户的
     * @param params
     * @param user 
     * @return
     */
	PageUtils allProcessList(Map<String, Object> params, UserVO user);

	/**
	 * 终止流程
	 * @param processid
	 * @param deleteReason
	 * @param user
	 */
	void deleteProcess(String processid, String deleteReason, UserVO user);



	/**
     * 暂存审批意见
     * @param userId 用户id
     * @param taskId 任务id
     * @param approveAdvice 审批意见
     * @param authCatagory 是否代理
     * @param owner 授权人，authCatagory是‘1’时候
     */
	void saveApproveAdvice(String userId, String taskId, String approveAdvice, String authCatagory, String owner);

	/**
	 * 根据当前流程任务id查询流程变量
	 * 
	 * @param taskId
	 * @return
	 */
    Map<String, Object> getTaskParamByTaskId(String taskId);
}
